// 导入
import http from 'wechat-http'
// 这个插件只对 wx.request封装了！ 没有对wx.uploadFile进行封装

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = (options) => {
  // 拓展信息头
  const defaultHeader = {}
  // 添加
  defaultHeader.Authorization = `Bearer ` + getApp().token
  // 合并 Object.assign(对象1，对象2，对象3,....)
  options.header = Object.assign({}, defaultHeader, options.header)
  // 一定要return options，否则请求出不去
  return options
}

// 响应拦截器
http.intercept.response = async (result) => {
  console.log(result);
  // result.statusCode 响应状态码
  // result.errMsg 响应消息
  // result.data 响应数据
  const { code, message, data } = result.data
  // code 业务码  message 业务消息  data 数据
  // 业务码 10000 是业务正确
  if (code === 10000) { // 业务正确
    return data
  } else { // 业务错误或请求错误
    if (code === 401) {
      // 验证token过期了
      // 1. 刷新token，更换新的验证token  (拿着app.refreshToken调用/refreshToken)
      const app = getApp()
      wx.request({
        url: http.baseURL + '/refreshToken',
        method: 'post',
        header: { Authorization: `Bearer ` + app.refreshToken },
        success: res => {
          if (res.data.code === 401) {
            // 刷新token也过期了,重新登录
            // token都被清除了
            app.setToken('token', '')
            app.setToken('refreshToken', '')
            // 跳转登录页
            const curPages = getCurrentPages();
            const page = curPages.pop()
            return wx.redirectTo({
              url: '/pages/login/index?redirectUrl=' + page.route
            })
          }
          if (res.data.code === 10000) {
            // 更换token成功
            app.setToken('token', res.data.data.token)
            app.setToken('refreshToken', res.data.data.refreshToken)
            // 2. 继续完成上一次没有完成的请求
            const config = Object.assign(result.config, {
              header: { Authorization: `Bearer ` + res.data.data.token }
            })
            // { url:"/请求地址", header:{请求头}, data:提交数据,method:"请求方式" }  ==> http({ url,header,data,method})
            return http(config)
          }
        },
        fail: err => {
          console.log(err);
        }
      })
    }
    wx.utils.toast(message || '业务错误')
    return Promise.reject(message || '业务错误')
  }
}

// 挂载到 wx 全局命名空间
wx.http = http

// 也可作为模块导出
export default http